package Grafo;

import Exceptions.ArestaNulaException;
import com.restfb.FacebookClient;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Vector;
import pds_facebook.Adapter.MyFriend;




    
public class Vertice  implements Comparable<Object>  {
	
	
	
	MyFriend myfriend;
        boolean isVisited;

    public MyFriend getMyfriend() {
        return myfriend;
    }
        
       private String nome = "";
	private Vector<Aresta> arestas = new Vector<Aresta>();
	
	private Vertice anterior;
	
	
	public Vertice() {}
	
	public Vertice( MyFriend friend) {
		
                myfriend = friend;
                this.setNome(myfriend.getName());
                isVisited = false;
	}
	
	public String getNome() {
		return this.nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public Vector<Aresta> getArestas() {
		return this.arestas;
	}
	
	public void setArestas(Vector<Aresta> arestas) {
		this.arestas = arestas;
	}
        public Vertice getAnterior() {
		return this.anterior;
	}

	public void setAnterior(Vertice anterior) {
		this.anterior = anterior;
	}

	

        //RETORNA O PESO DA ARESTA QUE LIGA ESTE VERTICE AOUTRO VERTICE QUE DEVE SER ADJACENTE
	public int getPeso(Vertice destino) {
		Iterator<Aresta> i = this.getArestas().iterator();
		
		while (i.hasNext()) {
			Aresta aresta = (Aresta)i.next();
			
			if ((aresta.getOrigem().compareTo(this) == 0 && aresta.getDestino().compareTo(destino) == 0) ||
				(aresta.getOrigem().compareTo(destino) == 0 && aresta.getDestino().compareTo(this) == 0)) {
				return aresta.getPeso();
			}
		}
		return Integer.MAX_VALUE;
	}


	public void adicionarAresta(Aresta aresta) throws ArestaNulaException {
		if (aresta == null) {
			throw  new ArestaNulaException("Aresta nula!");
		}
		if (this.getArestas().indexOf(aresta) == -1){
			this.getArestas().add(aresta);
		}
	}
	
	//recupera os vertices adjacentes
	public LinkedList<Vertice> getAdjacentes() {
		LinkedList<Vertice> vertices = new LinkedList<Vertice>();
               
		Iterator<Aresta> i = this.getArestas().iterator();
		
		if (this.getArestas().size() == 0)
			return null; 
		
		int count = 0;
		while (i.hasNext()) {
			Aresta aresta = (Aresta)i.next();
			
			if (aresta.getOrigem().compareTo(this) == 0){
				vertices.add(aresta.getDestino());
			}else{
				vertices.add(aresta.getOrigem());
			}
			count++;
		}
		
		return vertices;
	}
	
	public int compareTo(Object obj) {
		if (obj == null){
			return -1;
		}
		if (obj instanceof Vertice) {
			Vertice other = (Vertice) obj;
			
			return this.getNome().compareToIgnoreCase(other.getNome());
		}else{
			return -1;
		}
	}
	
	public boolean equals(Object obj) {
		return this.compareTo(obj) == 0;
	}
        
        public void acceptVisitor(Visitor visitor) {
        visitor.visitFriend(this);
    }
}
